package com.huxiaoshou.exam.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huxiaoshou.exam.entity.Question;
import com.huxiaoshou.exam.vo.QuestionQueryVo;

import java.util.List;

public interface QuestionService extends IService<Question> {

    /**
     * 分页查询题目数据
     *
     * @param pageBean        分页查询
     * @param questionQueryVo 查询条件
     */
    void customPageService(Page<Question> pageBean, QuestionQueryVo questionQueryVo);

    /**
     * 根据ID查询单个题目详情
     *
     * @param id 题目ID
     * @return 题目详情
     */
    Question customDetailQuestion(Long id);

    /**
     * 创建题目
     *
     * @param question 题目详情
     */
    void customSaveQuestion(Question question);

    /**
     * 更新题目及其完整信息（包含选项和答案）
     * <p>
     * 业务复杂性：
     * - 需要处理选项的增删改：删除旧选项，添加新选项
     * - 答案更新：覆盖原有答案或新增答案
     * - 数据完整性：确保更新过程中数据一致
     * <p>
     * 实现策略：
     * 1. 更新题目主表信息
     * 2. 删除原有选项，重新插入新选项（简化逻辑）
     * 3. 更新或插入答案信息
     *
     * @param question 包含更新信息的题目对象
     */
    void customUpdateQuestion(Question question);

    /**
     * 删除题目
     * 实现策略：
     * 1. 判断试卷是有有引用题目，有，删除失败！提示！
     * 2. 先删除子数据（选项和答案）
     * 3. 删除主数据题目表
     *
     * @param id 题目ID
     */
    void customRemoveQuestionById(Long id);

    /**
     * 查询指定数量的热门题目
     *
     * @param size 默认：6
     * @return 题目列表
     */
    List<Question> customFindPopularQuestions(Integer size);

}